//
//  ZYXPCContactsViewController.m
//  OCDataStore
//
//  联系人列表
//

#import "ZYXPCContactsViewController.h"

#import "ZYXPCAddViewController.h"

#import "ZYXContact.h"

#import "ZYXContactCell.h"

#import "ZYXPCEditViewController.h"


@interface ZYXPCContactsViewController () <UIActionSheetDelegate, ZYXPCAddViewControllerDelegate ,ZYXPCEditViewControllerDelegate>

@property (nonatomic, strong) NSMutableArray *contacts;

//在当前页面退出登录 注销操作
- (IBAction)logout:(id)sender;

@end

@implementation ZYXPCContactsViewController

-(void)viewDidLoad
{
    [super viewDidLoad];
    
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; //去掉cell默认边线
    self.tableView.rowHeight = 70;
}

- (NSMutableArray *)contacts
{
    if (_contacts == nil) {
        _contacts = [NSMutableArray array];
    }
    return _contacts;
}

/**
 *  执行跳转之前会调用
 *  在这个方法中,目标控制器的view还没有被创建
 */
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    /*
    // 设置下一个控制器(添加联系人控制器)的代理
    ZYXPCAddViewController *addVc = segue.destinationViewController;
    addVc.delegate = self;
    */
    
    id vc = segue.destinationViewController;
    
    if ([vc isKindOfClass:[ZYXPCAddViewController class]]) {            // 如果是跳转到添加联系人控制器
        // 设置下一个控制器(添加联系人控制器)的代理
        ZYXPCAddViewController *addVc = vc;
        addVc.delegate = self;                                          // ZYXPCAddViewControllerDelegate
    } else if ([vc isKindOfClass:[ZYXPCEditViewController class]]) {    // 如果是跳转到查看(编辑)联系人的控制器
        ZYXPCEditViewController *editVc = vc;
        // 取得选中的那行
        NSIndexPath *path   = [self.tableView indexPathForSelectedRow];
        editVc.contact      = self.contacts[path.row];
        editVc.delegate     = self;                                     // ZYXPCEditViewControllerDelegate
    }
}

#pragma mark - ZYXPCAddViewController的代理方法  ZYXPCAddViewControllerDelegate协议中定义
- (void)addViewController:(ZYXPCAddViewController *)addVc didAddContact:(ZYXContact *)contact
{
    //ZYXLog(@"%@",contact);
    
    // 1.添加模型数据
    [self.contacts addObject:contact];
    
    //ZYXLog(@"%lu",(unsigned long)self.contacts.count);
    
    // 2.刷新表格
    [self.tableView reloadData];
}

#pragma mark - ZYXPCEditViewController的代理方法  ZYXPCEditViewControllerDelegate协议中定义
- (void)editViewController:(ZYXPCEditViewController *)editVc didSaveContact:(ZYXContact *)contact
{
    [self.tableView reloadData];
}

#pragma mark - Table view data source UITableViewController默认是自己UITableView的UITableViewDataSource
//UITableView 数据源的三个方法 实现错误 就显示不出正确的数据

//该tableView的数据组数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    //ZYXLog(@"numberOfSectionsInTableView");
    
    return 1;
}

//每数据组的数据行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.contacts.count;
}


//每数据行对应的cell数据
/*
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ZYXLog(@"cellForRowAtIndexPath");
    
    // 1.创建cell
    static NSString *ID = @"contact";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:ID];
    }
    
    // 2.设置cell的数据
    ZYXContact *contact = self.contacts[indexPath.row];
    cell.textLabel.text = contact.name;
    cell.detailTextLabel.text = contact.phone;
    
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    
    return cell;
}
*/

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 1.创建cell
    ZYXContactCell *cell = [ZYXContactCell cellWithTableView:tableView];
    
    // 2.设置cell的数据
    cell.contact = self.contacts[indexPath.row];
    
    return cell;
}


/**
 *  注销
 */
- (IBAction)logout:(id)sender {
    UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"确定要注销?" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"确定" otherButtonTitles:nil, nil];
    [sheet showInView:self.view];
}

#pragma mark - UIActionSheet的代理方法   UIActionSheetDelegate协议中定义
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex != 0) return; // 0 确定按钮
    
    //返回登录页面
    [self.navigationController popViewControllerAnimated:YES];
}

@end
